package empe;

/**
 * Classe central global que contem todas as informacoes de controlo da simulacao
 */
public abstract class Controlo {

	private static int tmax;
	private static int n;
	private static int m;
	private static int[][] C;
	private static long populacao_init;
	private static long populacao_max;
	private static float micro, ro, delta;
	private static float tmin;
	protected static Lista_individuo lista_individuo;
	
	/**
	 * Inicializacao de todos o atributos de controlo
	 * @param ntmax tempo maximo de simulacao
	 * @param nn nº de processadores
	 * @param nm nº de tarefas
	 * @param nC matriz com todos os tempos de todas as tarefas em todos os processadores
	 * @param npopulacao_init populacao inicial
	 * @param npopulacao_max populacao maxima
	 * @param nmicro parametro da morte
	 * @param nro parametro da reproducao
	 * @param ndelta parametro da mutacao
	 */
	protected static void init (int ntmax, int nn, int nm, int[][] nC, 
								long npopulacao_init, long npopulacao_max, 
								float nmicro, float nro, float ndelta)
	{
		tmax=ntmax;
		n=nn;
		m=nm;
		C=nC;
		populacao_init=npopulacao_init;
		populacao_max=npopulacao_max;
		micro=nmicro;
		ro=nro;
		delta=ndelta;
		
		calcular_tmin();
	}
	
	/**
	 * Calcula o t_min da matriz referencia
	 */
	protected static void calcular_tmin()
	{
		int i;
		int f;
		tmin=0;
		int tempmin=0;
		
		for(i=0; i<m; i++)
		{
			for(f=0, tempmin=C[0][i];f<n;f++)
			{
				if(C[f][i]<tempmin)
				{
					tempmin=C[f][i];
				}
			}
			tmin+=tempmin;
		}
		
		tmin=tmin/n;
	}
	
	/**
	 * retorna o tempo maximo de simulacao
	 * @return tempo maximo de simulacao
	 */
	protected static int ler_tmax() {return tmax;}
	/**
	 * retorna o numero de processadores
	 * @return numero de processadores
	 */
	protected static int ler_n() {return n;}
	/**
	 * retorna o numero de tarefas
	 * @return numero de tarefas
	 */
	protected static int ler_m() {return m;}
	/**
	 * retorna a matriz referencia
	 * @return matriz referencia
	 */
	protected static int[][] ler_C() {return C;}
	/**
	 * retorna populacao inicial
	 * @return populacao inicial
	 */
	protected static long ler_populacao_init() {return populacao_init;}
	/**
	 * retorna a populacao maxima
	 * @return populacao maxima
	 */
	protected static long ler_populacao_max() {return populacao_max;}
	/**
	 * retorna o parametro da morte
	 * @return parametro da morte
	 */
	protected static float ler_micro() {return micro;}
	/** 
	 * retorna o parametro da reproducao
	 * @return parametro da reproducao
	 */
	protected static float ler_ro() {return ro;}
	/**
	 * retorna o parametro da mutacao
	 * @return parametro da mutacao
	 */
	protected static float ler_delta() {return delta;}
	/**
	 * retorna o tempo minimo de execucao em paralelo
	 * @return tempo minimo de execucao em paralelo
	 */
	protected static float ler_tmin() {return tmin;}
	
	/**
	 * inicializa o atributo que contem a lista de individuos
	 * @param lista lista de individuos a associar ao controlo
	 */
	protected static void set_lista_individuos(Lista_individuo lista)
	{
		lista_individuo=lista;
	}
}
